# author: LiuShihao
# data: 2020/11/25 8:40 下午
# youknow: 各位老铁,我的这套代码曾经有人出价三个亿我没有卖,如今拿出来和大家分享,不求别的,只求大家免费的小红心帮忙点一点,这里谢过了。
# desc: 数据结构 元组的学习
"""
Python的内置数据结构之一，是一个不可变序列
不可变序列：int、str、元组   没有增删改的操作
可变序列：列表、字典   ，可以进行增删改操作，对象地址不发生改变。
"""
"""
元组的创建方式：
    1.直接小括号   t = ('Python','hello',90)
    2.使用内置函数tuple（）   t = tuple(('Python','hello',90))
另外第一种方式可以省略小括号（）   t = 'Python','hello',90  
但是 只包含一个元素的元组需要使用逗号和小括号  t = (10,)
"""
t1 = ('Python','hello',90)
t11 = 'Python','hello',90
t2 = tuple(('Python','hello',90))
print(t1,type(t1))
print(t11,type(t11))
print(t2,type(t2))
# 空列表的创建
lst = []
print(lst,type(lst))
lst = list()
print(lst,type(lst))
# 空字典的创建
d = {}
print(d,type(d))
d = dict()
print(d,type(d))
# 空元组的创建
t = ()
print(t,type(t))
t = tuple()
print(t,type(t))
"""
 元组中存储的是对象的引用：
 1. 如果元组中的对象本身是不可变对象，则不能再引用其他对象。
 2. 如果元组中的对象是可变对象，则可变对象的引用不允许改变，但数据可以改变。
"""
t = (10,[20,30],9)
print(t,type(t))            # (10, [20, 30], 9) <class 'tuple'>
print(t[0],type(t[0]))      # 10 <class 'int'>
print(t[1],type(t[1]))      # [20, 30] <class 'list'>
print(t[2],type(t[2]))      # 9 <class 'int'>
# t[1] = 100  # 报错   元组中的元素时不允许修改的  TypeError: 'tuple' object does not support item assignment
# 但是t[1]是列表，可以修改列表中的数据
t[1].append(100)
print(t)
t = ('Python',98,'hello')
# 获取元组元素的方法  t[索引]
print(t[0])
print(t[1])
print(t[2])
# 遍历元组
for item in t:
    print(item)